/**
 * 
 */
package ma.moliere.presentation.controleur;

import java.io.IOException;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.servlet.ServletException;

import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.context.SecurityContextHolder;

/**
 * @author sasmami
 * 
 */
public class LoginControleur {

	/** nom utilisateur. */
	private String username = "";
	/** Mot de passe. */
	private String password = "";
	/** option rememberMe. */
	private boolean rememberMe = false;
	/** variable de login. */
	private boolean loggedIn = false;
	/** Injection de l'authentication manager de spring security. */
	private AuthenticationManager authenticationManager;

	/**
	 * Action pour se connecter.
	 * 
	 * @return : Ecran d'accueil
	 * @throws IOException
	 *             : exception IO
	 * @throws ServletException
	 *             : exception Servlet
	 */
	public final String login() {
		try {
			Authentication request = new UsernamePasswordAuthenticationToken(this.getUsername(), this.getPassword());
			Authentication result = authenticationManager.authenticate(request);
			SecurityContextHolder.getContext().setAuthentication(result);
		} catch (AuthenticationException e) {
			e.printStackTrace();
			FacesMessage facesMsg = new FacesMessage(FacesMessage.SEVERITY_ERROR,
				"Erreur de connexion,login ou le mot de passe incorrecte", null);
			FacesContext context = FacesContext.getCurrentInstance();
			context.addMessage(null, facesMsg);
			return null;
		}
		return "OK";
	}

	/**
	 * Accesseur en lecture pour l'attribut username.
	 * 
	 * @return username.
	 */
	public final String getUsername() {
		return username;
	}

	/**
	 * Accesseur en ecriture pour l'attribut username.
	 */
	public final void setUsername(final String username) {
		this.username = username;
	}

	/**
	 * Accesseur en lecture pour l'attribut password.
	 */
	public final String getPassword() {
		return password;
	}

	/**
	 * Accesseur en ecriture pour l'attribut password
	 */
	public void setPassword(final String password) {
		this.password = password;
	}

	/**
	 * Accesseur en lecture pour l'attribut rememberMe.
	 */
	public boolean isRememberMe() {
		return rememberMe;
	}

	/**
	 * Accesseur en ecriture pour l'attribut rememberMe
	 */
	public void setRememberMe(final boolean rememberMe) {
		this.rememberMe = rememberMe;
	}

	/**
	 * Accesseur en lecture pour l'attribut loggedIn.
	 */
	public boolean isLoggedIn() {
		return loggedIn;
	}

	/**
	 * Accesseur en ecriture pour l'attribut loggedIn
	 */
	public void setLoggedIn(final boolean loggedIn) {
		this.loggedIn = loggedIn;
	}

	/**
	 * Accesseur en lecture pour l'attribut authenticationmanager.
	 */
	public AuthenticationManager getAuthenticationManager() {
		return authenticationManager;
	}

	/**
	 * Accesseur en ecriture pour l'attribut authenticationmanager
	 */
	public void setAuthenticationManager(final AuthenticationManager authenticationManager) {
		this.authenticationManager = authenticationManager;
	}
}
